<!DOCTYPE html>
<html CN>







<head>
	
	
	<link rel="stylesheet" href="/css/allinone.min.css"> 

	
	<!-- Global Site Tag (gtag.js) - Google Analytics -->
	<script async src="https://www.googletagmanager.com/gtag/js?id=UA-42863699-1"></script>
	<script>
		window.dataLayer = window.dataLayer || [];
		function gtag(){dataLayer.push(arguments);}
		gtag('js', new Date());
		gtag('config', 'UA-42863699-1');
	</script>
	

	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge" />

	<title>apt 背后的故事 | Cizixs Write Here</title>

	<meta name="HandheldFriendly" content="True" />
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
	<meta name="generator" content="hexo">
	<meta name="author" content="Cizixs Wu">
	<meta name="description" content="">

	
	<meta name="keywords" content="">
	

	
	<link rel="shortcut icon" href="https://cizixs-blog.oss-cn-beijing.aliyuncs.com/006tNc79ly1g1qxfovpzyj30740743yg.jpg">
	

	
	<meta name="theme-color" content="#3c484e">
	<meta name="msapplication-TileColor" content="#3c484e">
	

	

	

	<meta property="og:site_name" content="Cizixs Write Here">
	<meta property="og:type" content="article">
	<meta property="og:title" content="apt 背后的故事 | Cizixs Write Here">
	<meta property="og:description" content="">
	<meta property="og:url" content="http://cizixs.com/2014/04/10/ubuntu_repository_format_explained/">

	
	<meta property="article:published_time" content="2014-04-10T00:04:00+08:00"/> 
	<meta property="article:author" content="Cizixs Wu">
	<meta property="article:published_first" content="Cizixs Write Here, /2014/04/10/ubuntu_repository_format_explained/" />
	

	
	
	<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
	

	
	<script src="https://cdn.staticfile.org/highlight.js/9.10.0/highlight.min.js"></script>
	

	
	
<link rel="stylesheet" href="/css/prism-base16-ateliersulphurpool.light.css" type="text/css"></head>
<body class="post-template">
    <div class="site-wrapper">
        




<header class="site-header outer" style="z-index: 999">
    <div class="inner">
        
<nav class="site-nav"> 
    <div class="site-nav-left">
        <ul class="nav">
            <li>
                
                <a href="/" title="Home">Home</a>
                
            </li>
            
            
            <li>
                <a href="/about" title="About">About</a>
            </li>
            
            <li>
                <a href="/archives" title="Archives">Archives</a>
            </li>
            
            
        </ul> 
    </div>
    <div class="site-nav-right">
        
<div class="social-links" >
    
    <a class="social-link" title="weibo" href="https://weibo.com/1921727853" target="_blank" rel="noopener">
        <svg viewBox="0 0 1141 1024" xmlns="http://www.w3.org/2000/svg"><path d="M916.48 518.144q27.648 21.504 38.912 51.712t9.216 62.976-14.336 65.536-31.744 59.392q-34.816 48.128-78.848 81.92t-91.136 56.32-94.72 35.328-89.6 18.944-75.264 7.68-51.712 1.536-49.152-2.56-68.096-10.24-78.336-21.504-79.872-36.352-74.24-55.296-59.904-78.848q-16.384-29.696-22.016-63.488t-5.632-86.016q0-22.528 7.68-51.2t27.136-63.488 53.248-75.776 86.016-90.112q51.2-48.128 105.984-85.504t117.248-57.856q28.672-10.24 63.488-11.264t57.344 11.264q10.24 11.264 19.456 23.04t12.288 29.184q3.072 14.336 0.512 27.648t-5.632 26.624-5.12 25.6 2.048 22.528q17.408 2.048 33.792-1.536t31.744-9.216 31.232-11.776 33.28-9.216q27.648-5.12 54.784-4.608t49.152 7.68 36.352 22.016 17.408 38.4q2.048 14.336-2.048 26.624t-8.704 23.04-7.168 22.016 1.536 23.552q3.072 7.168 14.848 13.312t27.136 12.288 32.256 13.312 29.184 16.384zM658.432 836.608q26.624-16.384 53.76-45.056t44.032-64 18.944-75.776-20.48-81.408q-19.456-33.792-47.616-57.344t-62.976-37.376-74.24-19.968-80.384-6.144q-78.848 0-139.776 16.384t-105.472 43.008-72.192 60.416-38.912 68.608q-11.264 33.792-6.656 67.072t20.992 62.976 42.496 53.248 57.856 37.888q58.368 25.6 119.296 32.256t116.224 0.512 100.864-21.504 74.24-33.792zM524.288 513.024q20.48 8.192 38.912 18.432t32.768 27.648q10.24 12.288 17.92 30.72t10.752 39.424 1.536 42.496-9.728 38.912q-8.192 18.432-19.968 37.376t-28.672 35.328-40.448 29.184-57.344 18.944q-61.44 11.264-117.76-11.264t-88.064-74.752q-12.288-39.936-13.312-70.656t16.384-66.56q13.312-27.648 40.448-51.712t62.464-38.912 75.264-17.408 78.848 12.8zM361.472 764.928q37.888 3.072 57.856-18.432t21.504-48.128-15.36-47.616-52.736-16.896q-27.648 3.072-43.008 23.552t-17.408 43.52 9.728 42.496 39.424 21.504zM780.288 6.144q74.752 0 139.776 19.968t113.664 57.856 76.288 92.16 27.648 122.88q0 33.792-16.384 50.688t-35.328 17.408-35.328-14.336-16.384-45.568q0-40.96-22.528-77.824t-59.392-64.512-84.48-43.52-96.768-15.872q-31.744 0-47.104-15.36t-14.336-34.304 18.944-34.304 51.712-15.36zM780.288 169.984q95.232 0 144.384 48.64t49.152 146.944q0 30.72-10.24 43.52t-22.528 11.264-22.528-14.848-10.24-35.84q0-60.416-34.816-96.256t-93.184-35.84q-19.456 0-28.672-10.752t-9.216-23.04 9.728-23.04 28.16-10.752z" /></svg>
    </a>
    

    
    <a class="social-link" title="github" href="https://github.com/cizixs" target="_blank" rel="noopener">
        <svg viewBox="0 0 1049 1024" xmlns="http://www.w3.org/2000/svg"><path d="M524.979332 0C234.676191 0 0 234.676191 0 524.979332c0 232.068678 150.366597 428.501342 358.967656 498.035028 26.075132 5.215026 35.636014-11.299224 35.636014-25.205961 0-12.168395-0.869171-53.888607-0.869171-97.347161-146.020741 31.290159-176.441729-62.580318-176.441729-62.580318-23.467619-60.841976-58.234462-76.487055-58.234463-76.487055-47.804409-32.15933 3.476684-32.15933 3.476685-32.15933 53.019436 3.476684 80.83291 53.888607 80.83291 53.888607 46.935238 79.963739 122.553122 57.365291 152.97411 43.458554 4.345855-33.897672 18.252593-57.365291 33.028501-70.402857-116.468925-12.168395-239.022047-57.365291-239.022047-259.012982 0-57.365291 20.860106-104.300529 53.888607-140.805715-5.215026-13.037566-23.467619-66.926173 5.215027-139.067372 0 0 44.327725-13.906737 144.282399 53.888607 41.720212-11.299224 86.917108-17.383422 131.244833-17.383422s89.524621 6.084198 131.244833 17.383422C756.178839 203.386032 800.506564 217.29277 800.506564 217.29277c28.682646 72.1412 10.430053 126.029806 5.215026 139.067372 33.897672 36.505185 53.888607 83.440424 53.888607 140.805715 0 201.64769-122.553122 245.975415-239.891218 259.012982 19.121764 16.514251 35.636014 47.804409 35.636015 97.347161 0 70.402857-0.869171 126.898978-0.869172 144.282399 0 13.906737 9.560882 30.420988 35.636015 25.205961 208.601059-69.533686 358.967656-265.96635 358.967655-498.035028C1049.958663 234.676191 814.413301 0 524.979332 0z" /></svg>
    </a>
    

    
    <a class="social-link" title="stackoverflow" href="https://stackoverflow.com/users/1925083/cizixs" target="_blank" rel="noopener">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M15 21h-10v-2h10v2zm6-11.665l-1.621-9.335-1.993.346 1.62 9.335 1.994-.346zm-5.964 6.937l-9.746-.975-.186 2.016 9.755.879.177-1.92zm.538-2.587l-9.276-2.608-.526 1.954 9.306 2.5.496-1.846zm1.204-2.413l-8.297-4.864-1.029 1.743 8.298 4.865 1.028-1.744zm1.866-1.467l-5.339-7.829-1.672 1.14 5.339 7.829 1.672-1.14zm-2.644 4.195v8h-12v-8h-2v10h16v-10h-2z"/></svg>
    </a>
    

    

    
    <a class="social-link" title="twitter" href="https://twitter.com/cizixs" target="_blank" rel="noopener">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M30.063 7.313c-.813 1.125-1.75 2.125-2.875 2.938v.75c0 1.563-.188 3.125-.688 4.625a15.088 15.088 0 0 1-2.063 4.438c-.875 1.438-2 2.688-3.25 3.813a15.015 15.015 0 0 1-4.625 2.563c-1.813.688-3.75 1-5.75 1-3.25 0-6.188-.875-8.875-2.625.438.063.875.125 1.375.125 2.688 0 5.063-.875 7.188-2.5-1.25 0-2.375-.375-3.375-1.125s-1.688-1.688-2.063-2.875c.438.063.813.125 1.125.125.5 0 1-.063 1.5-.25-1.313-.25-2.438-.938-3.313-1.938a5.673 5.673 0 0 1-1.313-3.688v-.063c.813.438 1.688.688 2.625.688a5.228 5.228 0 0 1-1.875-2c-.5-.875-.688-1.813-.688-2.75 0-1.063.25-2.063.75-2.938 1.438 1.75 3.188 3.188 5.25 4.25s4.313 1.688 6.688 1.813a5.579 5.579 0 0 1 1.5-5.438c1.125-1.125 2.5-1.688 4.125-1.688s3.063.625 4.188 1.813a11.48 11.48 0 0 0 3.688-1.375c-.438 1.375-1.313 2.438-2.563 3.188 1.125-.125 2.188-.438 3.313-.875z"/></svg>

    </a>
    

    
    <a class="social-link" title="instagram" href="https://www.instagram.com/cizixs/" target="_blank" rel="noopener">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"/></svg>
    </a>
    
    
    
</div>
    </div>
</nav>
    </div>
</header>


<main id="site-main" class="site-main outer" role="main">
    <div class="inner">
        <header class="post-full-header">
            <section class="post-full-meta">
                <time  class="post-full-meta-date" datetime="2014-04-09T16:00:00.000Z" itemprop="datePublished">
                    2014-04-10
                </time>
                
                <span class="date-divider">/</span>
                
                <a href="/categories/程序技术/">程序技术</a>&nbsp;&nbsp;
                
                
            </section>
            <h1 class="post-full-title">apt 背后的故事</h1>
        </header>
        <article class="post-full no-image">
            
            <section class="post-full-content">
                <div id="lightgallery" class="markdown-body">
                    <p>这篇文章介绍的是ubuntu系统的apt-get软件包的格式、管理，和其他系统可能会有出入。</p>
<h3 id="1-debian-sources-list-格式"><a href="#1-debian-sources-list-格式" class="headerlink" title="1. debian sources list 格式"></a>1. debian sources list 格式</h3><p>sources.list是debian系统用来指定软件源的文件，它的基本格式为：</p>
<blockquote>
<p>deb uri distribution [component1] [component2] […]</p>
</blockquote>
<p>我们使用国内的<a href="http://mirrors.163.com/" target="_blank" rel="noopener">163源</a>来说明每一行的具体含义<br>下面是来自<a href="http://mirrors.163.com/.help/ubuntu.html" target="_blank" rel="noopener">163源ubuntu帮助页面</a>的条目：</p>
<pre><code>deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse
</code></pre><ol>
<li><p>deb： deb指明二进制包的位置，deb-src则是源码包。<br> 每个档案可以有deb或者deb-src，或者兼而有之，但是两者必须分开声明。</p>
</li>
<li><p>uri： 比如这里的 <code>http://mirrors.163.com/ubuntu/</code>， 是所有存档的根目录。<br> 这个目录没有规定，可以是任意的文件夹。</p>
</li>
<li><p>distribution：发行版。<br> $ARCHIVE_ROOT/dists下面的子文件夹，可以使用嵌套的文件夹，比如<code>other/ubuntu</code>。发行版对应Release文件里的套件(suite)或者代号(codename)，这个后面会详细解释。<br> debian体系的发行版本包括：wheezy、squeeze等，每个版本有stable、testing、unstable等。<br> 而ubuntu的发型版本对应于每半年发布系统代号：raring、precise、saucy等</p>
</li>
<li><p>组件<br> 标准的debian组件包括：main、contrib、non-free、non-us。</p>
<ul>
<li>main: Debian 里最基本及主要且符合自由软件规范的软件 ( packages )。</li>
<li>contrib: 软件本身免费，但依赖的软件包不免费。</li>
<li>non-free: 非自由软件</li>
<li><p>non-us: 非美国地区，可能有加密、专利等</p>
<p>而ubuntu的组件与之不同：main, restricted, universe, multiverse.</p>
</li>
<li>main： ubuntu支持的免费软件包</li>
<li>restricted： 不免费，但是正规支持的</li>
<li>universe：免费，但不是正规支持的</li>
<li>multiverse：不免费，不支持</li>
</ul>
</li>
</ol>
<h3 id="2-debian-repository-目录结构"><a href="#2-debian-repository-目录结构" class="headerlink" title="2. debian repository 目录结构"></a>2. debian repository 目录结构</h3><p>下面是简化的Ubuntu源的目录结构。</p>
<p><img src="http://cizixs.u.qiniudn.com/ARCHIVE_tree.jpg" alt="repo file tree"></p>
<blockquote>
<p><strong>NOTE</strong>：</p>
<ol>
<li><p>所有的兄弟文件夹（父目录相同的文件夹）都只展开第一个</p>
</li>
<li><p>Pool文件夹的四个子文件夹里，存放的是按照字母顺序分类的各个软件包</p>
</li>
<li><p>每个repo的文件夹会有出入，实际以你使用的为准</p>
</li>
</ol>
</blockquote>
<h3 id="重要的文件-夹-和解释"><a href="#重要的文件-夹-和解释" class="headerlink" title="重要的文件(夹)和解释"></a>重要的文件(夹)和解释</h3><ul>
<li><p>根目录下至少有两个文件夹：<code>dists</code>和<code>pool</code>。<code>dists</code>文件夹里存储的是关于软件包的信息数据，包括：文件名称、大小、位置、校验码等。而<code>pool</code>文件下是具体的软件包存放位置，单独把文件放在<code>pool</code>文件夹里是为了防止文件的重复。</p>
</li>
<li><p>Release/InReleas</p>
<p>  文件位于<code>$ARVHIVE_ROOT/dists/$DISCTRIBUTION</code> 文件夹内，InRelease文件是内部自认证的，而<code>Release</code>文件需要伴随<code>Release.gpg</code>文件出现。这个文件包含该发布版（所在的文件夹）的索引文件和对应的hash。内部所列文件的位置是相对该文件的。比如上面的的source.list内容，为了获取main组件，apt会扫描<code>http://mirrors.163.com/ubuntu/dists/precise/Release</code>文件得到<code>main/binary-amd64/Packages.gz</code>组合成最终的地址<code>http://mirrors.163.com/ubuntu/dists/precise/main/binary-amd64/Packages.gz</code>。这里面就是precise发布版里main组件的所有软件索引。</p>
<p>  以<code>binary-$arch</code>命名的文件夹里是二进制文件的目录，源文件的目录在<code>source</code>文件夹。<br>  Package列出的文件是相对于<code>$ARCHIVE_ROOT</code>的。</p>
</li>
<li><p>Packages 和 Sources目录是是控制文件，包括索引、翻译和差异等。</p>
</li>
<li><code>.deb</code>文件是debian的包文件</li>
<li><code>.dsc</code>是debian的源码描述文件</li>
<li><code>.tar</code>是打包的文件</li>
<li><code>.gz</code>和<code>.bz2</code>是压缩的文件</li>
</ul>
<h3 id="Release-文件的内容"><a href="#Release-文件的内容" class="headerlink" title="Release 文件的内容"></a>Release 文件的内容</h3><p>上面已经说到，release文件就是索引文件。除了具体文件的hash和位置之外，一般还有其他的信息。</p>
<p>下面是release为文件的截图，注意：这只截取了开头的部分，完整的内容请参看实际的文件。</p>
<p><img src="http://cizixs.u.qiniudn.com/release.jpg" alt="release"></p>
<ul>
<li>可选项，这些提供了一些repo的基本信息<ul>
<li>Description： 描述</li>
<li>Origin：repo的来源</li>
<li>Label：标签说明</li>
<li>Suite： 套件，就是前面说的distribution</li>
<li>Codename： 发布的代号</li>
</ul>
</li>
<li>决定repo布局的选项<ul>
<li>Components： 对应前面的组件</li>
<li>Architectures：系统的架构</li>
</ul>
</li>
<li>功能性的选项<ul>
<li>Date：release文件的创建日期</li>
<li>Valid-Util：保质期</li>
<li>MD5Sum, SHA1, SHA256： 指使文件的位置和认证索引文件的真伪，包括：<ul>
<li>checksum</li>
<li>文件大小</li>
<li>文件名</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>其中四个选项是server端必须的：</p>
<ol>
<li>SHA256</li>
<li>Suite and/or Codename</li>
<li>Architectures</li>
<li>Components</li>
</ol>
<h3 id="Package文件的内容"><a href="#Package文件的内容" class="headerlink" title="Package文件的内容"></a>Package文件的内容</h3><p><img src="http://cizixs.u.qiniudn.com/package.png" alt="package"></p>
<p>文件<code>dists/$DIST/$COMP/binary-$ARCH/Packages</code>是二进制包的索引。这个文件分成很多段，每一段是一个具体文件包的说明，上图是一个包的完整实例。其中包括的选项有：</p>
<ul>
<li>Filename：文件名，相对于$ARCHIVE_ROOT的路径（必须）</li>
<li>Size： 文件大小，byte为单位（必须）</li>
<li>MD5Sum， SHA1，SHA256：加密hash，验证wfjm（推荐）</li>
<li>Description-md5（可选）</li>
</ul>
<h3 id="Sources文件的内容"><a href="#Sources文件的内容" class="headerlink" title="Sources文件的内容"></a>Sources文件的内容</h3><p><img src="http://cizixs.u.qiniudn.com/sources.png" alt="sources"></p>
<p>文件<code>$DIST/$COMP/source/Sources</code>被称为源码文件索引。它们和Packages文件相似，分为很多段，每一段描述一个源码文件包。<br>几个重要的选项有：</p>
<ul>
<li>Directory： 文件包所在的目录</li>
<li>Package: 文件名</li>
<li>version： 版本号</li>
<li>Priority： 优先级，包括source、optional等选项</li>
<li>Files: 包括的文件</li>
<li>Checksums-Sha1(256): 校验和</li>
</ul>
<h3 id="3-apt-get-的流程"><a href="#3-apt-get-的流程" class="headerlink" title="3. apt-get 的流程"></a>3. apt-get 的流程</h3><p>了解到上面各个文件和文件夹的用处和内容之后，apt的工作流程也就很好理解了。</p>
<ol>
<li>apt程序解析source.list，根据后面的uri和发行版得到release的文件的位置</li>
<li>dns解析url的ip，请求release文件，解析组件的release文件和package文件，根据package文件里的内容找到所要装的文件包，并验证所有文件的合法性。</li>
<li>如果文件包有依赖（depends），继续使用上述的方法定位到依赖的安装包。安装所有依赖后，再安装该软件包。</li>
<li>如果文件包没有依赖，直接安装。</li>
</ol>
<h3 id="4-定制自己的source-list文件"><a href="#4-定制自己的source-list文件" class="headerlink" title="4. 定制自己的source.list文件"></a>4. 定制自己的source.list文件</h3><ol>
<li>找到repo的根目录（$ARCHIVE_ROOT），就是包含<code>dists</code>和<code>pool</code>目录的那个目录，记为</li>
<li>打开<code>dists</code>目录，记下其中的子目录名称，找到自己要使用的版本名</li>
<li>打开<code>pool</code>目录，找到里面的组件名称</li>
<li>编写自己的<code>source.list</code>，格式为<code>deb url codename component</code>。</li>
<li>更新一下：<code>sudo apt-get update</code>。</li>
</ol>
<h3 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h3><ul>
<li><a href="https://www.debian.org/doc/manuals/repository-howto/repository-howto" target="_blank" rel="noopener">Debian Repository HOWTO </a></li>
<li><a href="https://wiki.debian.org/RepositoryFormat" target="_blank" rel="noopener">Debian Repository Format</a></li>
<li><a href="http://www.cnblogs.com/beanmoon/p/3387652.html" target="_blank" rel="noopener">debian软件源source.list文件格式说明</a></li>
<li><a href="https://help.ubuntu.com/community/Repositories/Ubuntu" target="_blank" rel="noopener">Ubuntu Repository Wiki</a></li>
<li><a href="http://askubuntu.com/questions/27513/what-is-the-difference-between-debian-contrib-non-free-and-how-it-corresponds" target="_blank" rel="noopener">difference between Debian’s contrib and non-free sections</a></li>
<li><a href="http://ftp.debian.org/debian/" target="_blank" rel="noopener">debian repository</a></li>
<li><a href="https://wiki.ubuntu.com/DevelopmentCodeNames" target="_blank" rel="noopener">ubuntu codename wiki</a></li>
<li><a href="https://wiki.debian.org/DebianReleases" target="_blank" rel="noopener">debian release</a></li>
</ul>
<blockquote>
<p>Written by <a href="cizixs.github.io/about">cizixs</a> with <a href="https://stackedit.io/" target="_blank" rel="noopener">StackEdit</a>.</p>
<p><a href="https://me.alipay.com/cizixs" target="_blank" rel="noopener">帮助博主娶老婆</a></p>
</blockquote>

                </div>
            </section>
        </article>
    </div>
    
<nav class="pagination">
    
    
    <a class="prev-post" title="【翻译】curl自动化http操作" href="/2014/05/14/curl-automate-http/">
        ← 【翻译】curl自动化http操作
    </a>
    
    <span class="prev-next-post">•</span>
    
    <a class="next-post" title="c string function implementation" href="/2014/03/05/c-string-function-implementation/">
        c string function implementation →
    </a>
    
    
</nav>

    <div class="inner">
    <!-- Begin Mailchimp Signup Form -->
    <link href="//cdn-images.mailchimp.com/embedcode/classic-10_7.css" rel="stylesheet" type="text/css">
    <style type="text/css">
    	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
    	/* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.
    	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
    </style>
    <div id="mc_embed_signup">
    <form action="https://cizixs.us7.list-manage.com/subscribe/post?u=2d561b8dea52d73a2e05e6dcb&amp;id=5c710f135b" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
        <div id="mc_embed_signup_scroll">
    	<h2>订阅本博客，第一时间收到文章更新</h2>
    <div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
    <div class="mc-field-group">
    	<label for="mce-EMAIL">邮件地址  <span class="asterisk">*</span>
    </label>
    	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
    </div>
    	<div id="mce-responses" class="clear">
    		<div class="response" id="mce-error-response" style="display:none"></div>
    		<div class="response" id="mce-success-response" style="display:none"></div>
    	</div>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
        <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_2d561b8dea52d73a2e05e6dcb_5c710f135b" tabindex="-1" value=""></div>
        <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
        </div>
    </form>
    </div>
    <script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script><script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
    <!--End mc_embed_signup-->
    </div>

    <div class="inner">
        <div id="disqus_thread"></div>
    </div>

    
</main>

<div class="t-g-control">
    <div class="gotop">
        <svg class="icon" width="32px" height="32px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M793.024 710.272a32 32 0 1 0 45.952-44.544l-310.304-320a32 32 0 0 0-46.4 0.48l-297.696 320a32 32 0 0 0 46.848 43.584l274.752-295.328 286.848 295.808z" fill="#8a8a8a" /></svg>
    </div>
    <div class="toc-control">
        <svg class="icon toc-icon" width="32px" height="32.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M779.776 480h-387.2a32 32 0 0 0 0 64h387.2a32 32 0 0 0 0-64M779.776 672h-387.2a32 32 0 0 0 0 64h387.2a32 32 0 0 0 0-64M256 288a32 32 0 1 0 0 64 32 32 0 0 0 0-64M392.576 352h387.2a32 32 0 0 0 0-64h-387.2a32 32 0 0 0 0 64M256 480a32 32 0 1 0 0 64 32 32 0 0 0 0-64M256 672a32 32 0 1 0 0 64 32 32 0 0 0 0-64" fill="#8a8a8a" /></svg>
        <svg class="icon toc-close" style="display: none;" width="32px" height="32.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512 960c-247.039484 0-448-200.960516-448-448S264.960516 64 512 64 960 264.960516 960 512 759.039484 960 512 960zM512 128.287273c-211.584464 0-383.712727 172.128262-383.712727 383.712727 0 211.551781 172.128262 383.712727 383.712727 383.712727 211.551781 0 383.712727-172.159226 383.712727-383.712727C895.712727 300.415536 723.551781 128.287273 512 128.287273z" fill="#8a8a8a" /><path d="M557.05545 513.376159l138.367639-136.864185c12.576374-12.416396 12.672705-32.671738 0.25631-45.248112s-32.704421-12.672705-45.248112-0.25631l-138.560301 137.024163-136.447897-136.864185c-12.512727-12.512727-32.735385-12.576374-45.248112-0.063647-12.512727 12.480043-12.54369 32.735385-0.063647 45.248112l136.255235 136.671523-137.376804 135.904314c-12.576374 12.447359-12.672705 32.671738-0.25631 45.248112 6.271845 6.335493 14.496116 9.504099 22.751351 9.504099 8.12794 0 16.25588-3.103239 22.496761-9.247789l137.567746-136.064292 138.687596 139.136568c6.240882 6.271845 14.432469 9.407768 22.65674 9.407768 8.191587 0 16.352211-3.135923 22.591372-9.34412 12.512727-12.480043 12.54369-32.704421 0.063647-45.248112L557.05545 513.376159z" fill="#8a8a8a" /></svg>
    </div>
    <div class="gobottom">
        <svg class="icon" width="32px" height="32.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M231.424 346.208a32 32 0 0 0-46.848 43.584l297.696 320a32 32 0 0 0 46.4 0.48l310.304-320a32 32 0 1 0-45.952-44.544l-286.848 295.808-274.752-295.36z" fill="#8a8a8a" /></svg>
    </div>
</div>
<div class="toc-main" style="right: -100%">
    <div class="post-toc">
        <span>TOC</span>
        <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#1-debian-sources-list-格式"><span class="toc-text">1. debian sources list 格式</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-debian-repository-目录结构"><span class="toc-text">2. debian repository 目录结构</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#重要的文件-夹-和解释"><span class="toc-text">重要的文件(夹)和解释</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Release-文件的内容"><span class="toc-text">Release 文件的内容</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Package文件的内容"><span class="toc-text">Package文件的内容</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Sources文件的内容"><span class="toc-text">Sources文件的内容</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-apt-get-的流程"><span class="toc-text">3. apt-get 的流程</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-定制自己的source-list文件"><span class="toc-text">4. 定制自己的source.list文件</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#参考资料"><span class="toc-text">参考资料</span></a></li></ol>
    </div>
</div>



        

<aside class="read-next outer">
    <div class="inner">
        <div class="read-next-feed">
            
            

<article class="read-next-card"  style="background-image: url(https://cizixs-blog.oss-cn-beijing.aliyuncs.com/006tNc79ly1g1qxcn9ft3j318w0txdo6.jpg)"  >
  <header class="read-next-card-header">
    <small class="read-next-card-header-sitetitle">&mdash; Cizixs Write Here &mdash;</small>
    <h3 class="read-next-card-header-title">Recent Posts</h3>
  </header>
  <div class="read-next-divider">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
      <path d="M13 14.5s2 3 5 3 5.5-2.463 5.5-5.5S21 6.5 18 6.5c-5 0-7 11-12 11C2.962 17.5.5 15.037.5 12S3 6.5 6 6.5s4.5 3.5 4.5 3.5"/>
    </svg>
  </div>
  <div class="read-next-card-content">
    <ul>
      
      
      
      <li>
        <a href="/2018/08/26/what-is-istio/">什么是 istio</a>
      </li>
      
      
      
      <li>
        <a href="/2018/08/25/knative-serverless-platform/">serverless 平台 knative 简介</a>
      </li>
      
      
      
      <li>
        <a href="/2018/06/25/kubernetes-resource-management/">kubernetes 资源管理概述</a>
      </li>
      
      
      
      <li>
        <a href="/2018/01/24/use-prometheus-and-grafana-to-monitor-linux-machine/">使用 promethues 和 grafana 监控自己的 linux 机器</a>
      </li>
      
      
      
      <li>
        <a href="/2018/01/13/linux-udp-packet-drop-debug/">linux 系统 UDP 丢包问题分析思路</a>
      </li>
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    </ul>
  </div>
  <footer class="read-next-card-footer">
    <a href="/archives">  MORE  → </a>
  </footer>
</article>


            
            
            
        </div>
    </div>
</aside>


<footer class="site-footer outer">

	<div class="site-footer-content inner">
		<section class="copyright">
			<a href="/" title="Cizixs Write Here">Cizixs Write Here</a>
			&copy; 2019
		</section>
		<nav class="site-footer-nav">
			
            <a href="https://hexo.io" title="Hexo" target="_blank" rel="noopener">Hexo</a>
            <a href="https://github.com/xzhih/hexo-theme-casper" title="Casper" target="_blank" rel="noopener">Casper</a>
        </nav>
    </div>
</footer>






<div class="floating-header" >
	<div class="floating-header-logo">
        <a href="/" title="Cizixs Write Here">
			
                <img src="https://cizixs-blog.oss-cn-beijing.aliyuncs.com/006tNc79ly1g1qxfovpzyj30740743yg.jpg" alt="Cizixs Write Here icon" />
			
            <span>Cizixs Write Here</span>
        </a>
    </div>
    <span class="floating-header-divider">&mdash;</span>
    <div class="floating-header-title">apt 背后的故事</div>
    <progress class="progress" value="0">
        <div class="progress-container">
            <span class="progress-bar"></span>
        </div>
    </progress>
</div>
<script>
   $(document).ready(function () {
    var progressBar = document.querySelector('progress');
    var header = document.querySelector('.floating-header');
    var title = document.querySelector('.post-full-title');
    var lastScrollY = window.scrollY;
    var lastWindowHeight = window.innerHeight;
    var lastDocumentHeight = $(document).height();
    var ticking = false;

    function onScroll() {
        lastScrollY = window.scrollY;
        requestTick();
    }
    function requestTick() {
        if (!ticking) {
            requestAnimationFrame(update);
        }
        ticking = true;
    }
    function update() {
        var rect = title.getBoundingClientRect();
        var trigger = rect.top + window.scrollY;
        var triggerOffset = title.offsetHeight + 35;
        var progressMax = lastDocumentHeight - lastWindowHeight;
            // show/hide floating header
            if (lastScrollY >= trigger + triggerOffset) {
                header.classList.add('floating-active');
            } else {
                header.classList.remove('floating-active');
            }
            progressBar.setAttribute('max', progressMax);
            progressBar.setAttribute('value', lastScrollY);
            ticking = false;
        }

        window.addEventListener('scroll', onScroll, {passive: true});
        update();

        // TOC
        var width = $('.toc-main').width();
        $('.toc-control').click(function () {
            if ($('.t-g-control').css('width')=="50px") {
                if ($('.t-g-control').css('right')=="0px") {
                    $('.t-g-control').animate({right: width}, "slow");
                    $('.toc-main').animate({right: 0}, "slow");
                    toc_icon()
                } else {
                    $('.t-g-control').animate({right: 0}, "slow");
                    $('.toc-main').animate({right: -width}, "slow");
                    toc_icon()
                }
            } else {
                if ($('.toc-main').css('right')=="0px") {
                    $('.toc-main').slideToggle("fast", toc_icon());
                } else {
                    $('.toc-main').css('right', '0px');
                    toc_icon()
                }
            }
        })

        function toc_icon() {
            if ($('.toc-icon').css('display')=="none") {
                $('.toc-close').hide();
                $('.toc-icon').show();
            } else {
                $('.toc-icon').hide();
                $('.toc-close').show();
            }
        }

        $('.gotop').click(function(){
            $('html,body').animate({scrollTop:$('.post-full-header').offset().top}, 800);
        });
        $('.gobottom').click(function () {
            $('html,body').animate({scrollTop:$('.pagination').offset().top}, 800);
        });

        // highlight
        // https://highlightjs.org
        $('pre code').each(function(i, block) {
            hljs.highlightBlock(block);
        });
        $('td.code').each(function(i, block) {
            hljs.highlightBlock(block);
        });

        console.log("this theme is from https://github.com/xzhih/hexo-theme-casper")
    });
</script>



<link rel="stylesheet" href="https://cdn.staticfile.org/lightgallery/1.3.9/css/lightgallery.min.css">



<script src="https://cdn.staticfile.org/lightgallery/1.3.9/js/lightgallery.min.js"></script>


<script>
	$(function () {
		var postImg = $('#lightgallery').find('img');
		postImg.addClass('post-img');
		postImg.each(function () {
			var imgSrc = $(this).attr('src');
			$(this).attr('data-src', imgSrc);
		});
		$('#lightgallery').lightGallery({selector: '.post-img'});
	});
</script>



<script>

/**
*  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
*  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/

var disqus_config = function () {
this.page.url = 'http://cizixs.com/2014/04/10/ubuntu_repository_format_explained/';  // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = 'http://cizixs.com/2014/04/10/ubuntu_repository_format_explained/'; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};

(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://cizixs.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
                            


    </div>
</body>
</html>
